Análise do Jogo de Imagens aplicadas no Ensino médio

Roteiro de análise:

  1. Amostra dos dados da pesquisa realizada
  2. Determinar normalidade
  3. Determinar
  4. Histograma

Amostra dos dados da pesquisa realizada

Tabulação do número de acertos dos itens do jogo de imagens.

Coluna Descrição
Exoticas Número de acertos dentre todas as imagens exibidas do tipo exótica, valor experado é 5.
Nativas Número de acertos dentre todas as imagens exibidas do tipo nativa, valor experado é 5.

Determinado a taxa de percepção

Entende-se por taxa de percepção o fator determinado pela quantidade média de acertos dentre as questões apresentadas aos alunos, em relação a turma em que o questionario foi aplicado.

Teste de normalidade

Para determinar a normalidade nas distribuiçoes das respostas do jogo de imagens.

Identificação médio das turmas (nomes das espécies & origens)

Indice de reconhecimento médio das turmas

Q-Q Test

Teste de variância

Para determinar a variância

Algoritmo Comparação Variável p_valor variancia
F test to compare two variances Nativas x Exóticas Indice de reconhecimento 0.279 TRUE
Identificação do nome das espécies 0.6553 TRUE
Identificação da origem 0.0343 FALSE

Analises descritivas

Indice de identificação por Origem

Indice de identificação por Espécie

Testes de hipoteses

Esperado p-valor >= 0.05 na normalidade (espera-se H0) Esperado p-valor <= 0.05 no teste de hipotese (espera-se H1)

  1. Os alunos itendificam mais os nomes dos animais de espécies exóticas que os animais de espécies nativas.

TEST T-student
H0 = Tident(exoticas) = Tident(nativas)
H1 = Tident(exoticas) > Tident(nativas)

Algoritmo Comparação Variável p_valor H0 H1 Confiança
Two Sample t-test Nativas x Exóticas Indice de reconhecimento 0.0083 FALSE TRUE -20.26% ~ -3.25%
Identificação do nome das espécies 0 FALSE TRUE -46.21% ~ -27.69%
Identificação da origem 0 FALSE TRUE 22.49% ~ 33%

Obs.:
Intervalo de confiança 95%
## Hipotese 1
# t.test(jogo.dados.em.p$p_nativas, jogo.dados.em.p$p_exoticas, 
#        alternative = "two.sided", paired = F, var.equal = T)
  1. Os alunos identificam mais espécies de origem exótica que as de origem nativa.

TEST T-student
H0 = Tident(origem.exoticas) = Tident(origem.nativas)
H1 = Tident(origem.exoticas) > Tident(origem.nativas)

## Hipotese 2
t.test(pos_gabarito$proporcoes$por_turma$p_origem_nativas, 
       pos_gabarito$proporcoes$por_turma$p_origem_exoticas, 
       alternative = "two.sided", paired = F, var.equal = T)

    Two Sample t-test

data:  pos_gabarito$proporcoes$por_turma$p_origem_nativas and pos_gabarito$proporcoes$por_turma$p_origem_exoticas
t = 11, df = 32, p-value = 0.000000000004
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2249 0.3300
sample estimates:
mean of x mean of y 
   0.8005    0.5231 
  1. Os alunos identificam mais as espécies exóticas (nome dos animais e origem) que espécies nativas.

ANOVA

# t.test(jogo.dados.em.p$p_nativas, jogo.dados.em.p$p_origem_nativas, 
#        alternative = "two.sided", paired = F, var.equal = T)
# t.anova <- aov(g2$proporcao ~ g2$especie + g2$tipo)
# summary(t.anova)
  1. Os alunos reconhecem mais mamíferos do que os demais grupos taxonómicos.

ANOVA

## Hipotese 4
# t.test(jogo.dados.em.p$p_exoticas, jogo.dados.em.p$p_origem_exoticas, 
#        alternative = "two.sided", paired = F, var.equal = T)
  1. Estudantes que residem na Cidade 1 (com UC) identificam mais espécies nativas do que estudantes que residem na Cidade 2 (sem UC).
t.test(nat_silvania, nat_belavista,
       alternative = "two.sided", paired = F, var.equal = T)

    Two Sample t-test

data:  nat_silvania and nat_belavista
t = -0.7, df = 32, p-value = 0.5
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.13260  0.06473
sample estimates:
mean of x mean of y 
   0.3510    0.3849 
LS0tCnRpdGxlOiAiTWVzdHJhZG8gQmlvbG9naWEiCmF1dGhvcjogIkhlcnNvbiBNZWxvIgpkYXRlOiAiMjgvMDYvMjAxOCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rCi0tLQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPUZBTFNFLCBpbmNsdWRlID0gRkFMU0V9CmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkocmVzaGFwZTIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3B1YnIpCmxpYnJhcnkoZ3JpZCkKbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShub3J0ZXN0KQpsaWJyYXJ5KHN0YXRzKQpsaWJyYXJ5KG11bHRjb21wVmlldykKCnN1cHByZXNzV2FybmluZ3MoU3lzLnNldGxvY2FsZSgiTENfQUxMIiwgJ2VuX1VTLlVURi04JykpCm9wdGlvbnMoc2NpcGVuID0gOTk5LCBkaWdpdHMgPSA0KQojb3B0aW9ucygic2NpcGVuIj0tMTAwLCAiZGlnaXRzIj0xMCkKIyBnZXR3ZCgpCmxvYWQoImRhZG9zLlJEYXRhIikKYGBgCgojIyBBbsOhbGlzZSBkbyBKb2dvIGRlIEltYWdlbnMgYXBsaWNhZGFzIG5vIEVuc2lubyBtw6lkaW8KClJvdGVpcm8gZGUgYW7DoWxpc2U6CgoxLiBBbW9zdHJhIGRvcyBkYWRvcyBkYSBwZXNxdWlzYSByZWFsaXphZGEKMi4gRGV0ZXJtaW5hciBub3JtYWxpZGFkZQozLiBEZXRlcm1pbmFyIAo0LiBIaXN0b2dyYW1hCgojIyMgQW1vc3RyYSBkb3MgZGFkb3MgZGEgcGVzcXVpc2EgcmVhbGl6YWRhCgpUYWJ1bGHDp8OjbyBkbyBuw7ptZXJvIGRlIGFjZXJ0b3MgZG9zIGl0ZW5zIGRvIGpvZ28gZGUgaW1hZ2Vucy4KCmBgYHtyLCBlY2hvPUZBTFNFfQpkZXNjX2NvbHVuYXMgPC0gZGF0YS5mcmFtZSgKICAgICJDb2x1bmEiID0gYygiRXhvdGljYXMiLCAiTmF0aXZhcyIpLAogICAgIkRlc2NyacOnw6NvIiA9IGMoIk7Dum1lcm8gZGUgYWNlcnRvcyBkZW50cmUgdG9kYXMgYXMgaW1hZ2VucyBleGliaWRhcyBkbyB0aXBvIGV4w7N0aWNhLCB2YWxvciBleHBlcmFkbyDDqSA1LiIsCiAgICAgICAgICAgICAgICAgICAgIk7Dum1lcm8gZGUgYWNlcnRvcyBkZW50cmUgdG9kYXMgYXMgaW1hZ2VucyBleGliaWRhcyBkbyB0aXBvIG5hdGl2YSwgdmFsb3IgZXhwZXJhZG8gw6kgNS4iKQogICAgKQpkZXNjX2NvbHVuYXMgJT4lCiAga2FibGUoKSAlPiUKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSwgZnVsbF93aWR0aCA9IFRSVUUpICU+JQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKQoKYGBgCgoKYGBge3J9CmhlYWQocG9zX2dhYmFyaXRvJGRhZG9zLCAxMCkKYGBgCgojIyMjIERldGVybWluYWRvIGEgdGF4YSBkZSBwZXJjZXDDp8OjbwoKRW50ZW5kZS1zZSBwb3IgdGF4YSBkZSBwZXJjZXDDp8OjbyBvIGZhdG9yIGRldGVybWluYWRvIHBlbGEgcXVhbnRpZGFkZSBtw6lkaWEgZGUgYWNlcnRvcyBkZW50cmUgYXMgcXVlc3TDtWVzIGFwcmVzZW50YWRhcyBhb3MgYWx1bm9zLCBlbSByZWxhw6fDo28gYSB0dXJtYSBlbSBxdWUgbyBxdWVzdGlvbmFyaW8gZm9pIGFwbGljYWRvLgoKYGBge3J9CnByaW50KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSkKYGBgCgojIyMgVGVzdGUgZGUgbm9ybWFsaWRhZGUKClBhcmEgZGV0ZXJtaW5hciBhIG5vcm1hbGlkYWRlIG5hcyBkaXN0cmlidWnDp29lcyBkYXMgcmVzcG9zdGFzIGRvIGpvZ28gZGUgaW1hZ2Vucy4KCmBgYHtyLCBlY2hvPUZBTFNFfQpub3JtYWxpZGFkZSA8LSBmdW5jdGlvbih4KSB7CiAgICB0MSA8LSBzaGFwaXJvLnRlc3QoeCkKICAgIHQyIDwtIHNmLnRlc3QoeCkKICAgIHQzIDwtIGxpbGxpZS50ZXN0KHgpCiAgICB0NCA8LSBhZC50ZXN0KHgpCiAgICB0NSA8LSBjdm0udGVzdCh4KQogICAgcmV0dXJuKCBkYXRhLmZyYW1lKAogICAgICAgIEFsZ29yaXRtbyA9IGModDEkbWV0aG9kLCB0MiRtZXRob2QsIAogICAgICAgICAgICAgICAgICAgdDMkbWV0aG9kLCB0NCRtZXRob2QsIAogICAgICAgICAgICAgICAgICAgdDUkbWV0aG9kKSwKICAgICAgICBwLnZhbG9yID0gYyh0MSRwLnZhbHVlLCB0MiRwLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICB0MyRwLnZhbHVlLCB0NCRwLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICB0NSRwLnZhbHVlKSwKICAgICAgICBOb3JtYWxpZGFkZSA9IGModDEkcC52YWx1ZSA+IC4wNSwgdDIkcC52YWx1ZSA+IC4wNSwgCiAgICAgICAgICAgICAgICAgICAgICB0MyRwLnZhbHVlID4gLjA1LCB0NCRwLnZhbHVlID4gLjA1LCAKICAgICAgICAgICAgICAgICAgICAgIHQ1JHAudmFsdWUgPiAuMDUpCiAgICApKQp9CgpncmFmaWNvX2RlbnNpZGFkZSA8LSBmdW5jdGlvbih2YXJpYXZlbCwgY29yLCB0aXR1bG8pIHsKICAgIHBsb3QgPC0gCiAgICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hICU+JSAKICAgICAgICBnZ2RlbnNpdHkoeCA9IHZhcmlhdmVsLCBmaWxsID0gY29yLAogICAgICAgICAgbWFpbiA9IHRpdHVsbywKICAgICAgICAgIHhsYWIgPSAiUGVyY2VudHVhbCBkZSBhY2VydG9zIikgKyAKICAgICAgICB4bGltKDAsIDEpICsgCiAgICAgICAgeWxpbSgwLCA4KQogICAgbm9tYWxpZGFkZSA8LSAKICAgICAgICBnZ3RleHR0YWJsZSgKICAgICAgICAgICAgbm9ybWFsaWRhZGUocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hW1t2YXJpYXZlbF1dKSwgCiAgICAgICAgICAgIHJvd3MgPSBOVUxMLCB0aGVtZSA9IHR0aGVtZShiYXNlX3N0eWxlID0gIm1PcmFuZ2UiLCBiYXNlX3NpemUgPSA4KQogICAgICAgICkKICAgIAogICAgcmVzdWx0YWRvIDwtIGxpc3QoCiAgICAgICAgcGxvdCA9IHBsb3QsCiAgICAgICAgbm9ybWFsaWRhZGUgPSBub21hbGlkYWRlCiAgICApCiAgICByZXR1cm4ocmVzdWx0YWRvKQp9Cgp0MSA8LSBncmFmaWNvX2RlbnNpZGFkZSgicF9uYXRpdmFzIiwgImdyZWVuIiwgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIE5hdGl2YXMiKQp0MiA8LSBncmFmaWNvX2RlbnNpZGFkZSgicF9leG90aWNhcyIsICJyZWQiLCAiSWRlbnRpZmljYcOnw6NvIGRvIG5vbWUgZGFzIGVzcMOpY2llcyBkZSBvcmlnZW0gRXjDs3RpY2FzIikKdDMgPC0gZ3JhZmljb19kZW5zaWRhZGUoInBfb3JpZ2VtX25hdGl2YXMiLCAiZGFya2dyZWVuIiwgIklkZW50aWZpY2HDp8OjbyBkZSBvcmlnZW0gTmF0aXZhcyIpCnQ0IDwtIGdyYWZpY29fZGVuc2lkYWRlKCJwX29yaWdlbV9leG90aWNhcyIsICJkYXJrcmVkIiwgIklkZW50aWZpY2HDp8OjbyBkZSBvcmlnZW0gRXjDs3RpY2FzIikKdDUgPC0gZ3JhZmljb19kZW5zaWRhZGUoInBfaW5kaWNlX25hdGl2YXMiLCAib3JhbmdlIiwgIkluZGljZSBkZSByZWNvbmhlY2ltZW50byBOYXRpdmFzIChvcmlnZW5zICsgZXNww6ljaWVzKSIpCnQ2IDwtIGdyYWZpY29fZGVuc2lkYWRlKCJwX2luZGljZV9leG90aWNhcyIsICJvcmFuZ2VyZWQiLCAiSW5kaWNlIGRlIHJlY29uaGVjaW1lbnRvIEV4w7N0aWNhcyAob3JpZ2VucyArIGVzcMOpY2llcykiKQpgYGAKCiMjIyMgSWRlbnRpZmljYcOnw6NvIG3DqWRpbyBkYXMgdHVybWFzIChub21lcyBkYXMgZXNww6ljaWVzICYgb3JpZ2VucykKCmBgYHtyIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTV9CmdyaWQuYXJyYW5nZSh0MSRwbG90LCB0MiRwbG90LAogICAgICAgICAgICAgdDEkbm9ybWFsaWRhZGUsIHQyJG5vcm1hbGlkYWRlLAogICAgICAgICAgICAgdDMkcGxvdCwgdDQkcGxvdCwKICAgICAgICAgICAgIHQzJG5vcm1hbGlkYWRlLCB0NCRub3JtYWxpZGFkZSwKICAgICAgICAgICAgIG5jb2wgPSAyLAogICAgICAgICAgICAgaGVpZ2h0cyA9IGMoMywyLDMsMiksCiAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYigiRGVuc2lkYWRlIGRlIGlkZW50aWZpY2HDp8OjbyBtw6lkaWEgZGFzIHR1cm1hcyBlbnRyZSBcbmVzcGVjaWVzIGUgc3VhcyBvcmlnZW5zXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMjAsIGZvbnQgPSAyKSkKICAgICAgICAgICAgICkKYGBgCgojIyMjIEluZGljZSBkZSByZWNvbmhlY2ltZW50byBtw6lkaW8gZGFzIHR1cm1hcwoKYGBge3IgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9M30KZ3JpZC5hcnJhbmdlKHQ1JHBsb3QsIHQ2JHBsb3QsCiAgICAgICAgICAgICB0NSRub3JtYWxpZGFkZSwgdDYkbm9ybWFsaWRhZGUsCiAgICAgICAgICAgICBuY29sID0gMiwKICAgICAgICAgICAgIGhlaWdodHMgPSBjKDQsMyksCiAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYigiRGVuc2lkYWRlIGRvcyBpbmRpY2VzIGRlIHJlY29uaGVjaW1lbnRvIG3DqWRpbyBkYXMgdHVybWFzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMjAsIGZvbnQgPSAyKSkKICAgICAgICAgICAgICkKYGBgCgoKIyMjIFEtUSBUZXN0CgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9NH0KcXFwbG90LmRhdGEgPC0gZnVuY3Rpb24gKHZlYywgdGl0dWxvKSB7CiAgIyBmb2xsb3dpbmcgZm91ciBsaW5lcyBmcm9tIGJhc2UgUidzIHFxbGluZSgpCiAgeSA8LSBxdWFudGlsZSh2ZWNbIWlzLm5hKHZlYyldLCBjKDAuMjUsIDAuNzUpKQogIHggPC0gcW5vcm0oYygwLjI1LCAwLjc1KSkKICBzbG9wZSA8LSBkaWZmKHkpL2RpZmYoeCkKICBpbnQgPC0geVsxTF0gLSBzbG9wZSAqIHhbMUxdCgogIGQgPC0gZGF0YS5mcmFtZShyZXNpZHMgPSB2ZWMpCgogIGdncGxvdChkLCBhZXMoc2FtcGxlID0gcmVzaWRzKSkgKyAKICAgICAgc3RhdF9xcSgpICsgCiAgICAgIGdlb21fYWJsaW5lKHNsb3BlID0gc2xvcGUsIGludGVyY2VwdCA9IGludCwgY29sID0gInJlZCIpICsKICAgICAgeGxpbSgtMiwgMikgKwogICAgICB5bGltKDAsIDEpICsKICAgICAgdGhlbWVfYncoKSArCiAgICAgIGxhYnMoCiAgICAgICAgdGl0bGUgPSB0aXR1bG8KICAgICkKfQoKcTEgPC0gcXFwbG90LmRhdGEocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfbmF0aXZhcywgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIE5hdGl2YXMiKQpxMiA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9leG90aWNhcywgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIEV4b3RpY2FzIikKcTMgPC0gcXFwbG90LmRhdGEocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX25hdGl2YXMsICJJZGVudGlmaWNhw6fDo28gZGUgb3JpZ2VtIE5hdGl2YXMiKQpxNCA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fZXhvdGljYXMsICJJZGVudGlmaWNhw6fDo28gZGUgb3JpZ2VtIEV4b3RpY2FzIikKcTUgPC0gcXFwbG90LmRhdGEocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfaW5kaWNlX25hdGl2YXMsICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8gTmF0aXZhcyAob3JpZ2VucyArIGVzcMOpY2llcykiKQpxNiA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfZXhvdGljYXMsICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8gRXhvdGljYXMgKG9yaWdlbnMgKyBlc3DDqWNpZXMpIikKCmdyaWQuYXJyYW5nZShxMSwgcTIsIAogICAgICAgICAgICAgcTMsIHE0LAogICAgICAgICAgICAgcTUsIHE2LAogICAgICAgICAgICAgbmNvbCA9IDIsCiAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYigiTm9ybWFsIFEtUSBQbG90XG4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwID0gZ3Bhcihmb250c2l6ZSA9IDIwLCBmb250ID0gMikpCiAgICAgICAgICAgICApCmBgYAoKIyMjIFRlc3RlIGRlIHZhcmnDom5jaWEKClBhcmEgZGV0ZXJtaW5hciBhIHZhcmnDom5jaWEKCmBgYHtyfQp2YXJpYW5jaWEgPC0gZGF0YS5mcmFtZSgKICAgIEFsZ29yaXRtbyA9IGMoIkYgdGVzdCB0byBjb21wYXJlIHR3byB2YXJpYW5jZXMiKSwKICAgICJDb21wYXJhw6fDo28iID0gYygiTmF0aXZhcyB4IEV4w7N0aWNhcyIpLAogICAgIlZhcmnDoXZlbCIgPSBjKAogICAgICAgICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8iLAogICAgICAgICJJZGVudGlmaWNhw6fDo28gZG8gbm9tZSBkYXMgZXNww6ljaWVzIiwKICAgICAgICAiSWRlbnRpZmljYcOnw6NvIGRhIG9yaWdlbSIKICAgICksCiAgICAicF92YWxvciIgPSBjKAogICAgICAgIHZhci50ZXN0KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2luZGljZV9uYXRpdmFzLCAKICAgICAgICAgICAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfZXhvdGljYXMsIAogICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpJHAudmFsdWUsCiAgICAgICAgdmFyLnRlc3QocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfbmF0aXZhcywgCiAgICAgICAgICAgICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfZXhvdGljYXMsIAogICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpJHAudmFsdWUsCiAgICAgICAgdmFyLnRlc3QocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX25hdGl2YXMsIAogICAgICAgICAgICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9leG90aWNhcywgCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikkcC52YWx1ZQogICAgKQopCgp2YXJpYW5jaWEgPC0gdmFyaWFuY2lhICU+JQogICAgbXV0YXRlKAogICAgICAgIHZhcmlhbmNpYSA9IHBfdmFsb3IgPiAwLjA1LAogICAgICAgIHBfdmFsb3IgPSBjZWxsX3NwZWMocm91bmQocF92YWxvciwgNCksIGJvbGQgPSBULCBjb2xvciA9ICJibGFjayIsIGFsaWduID0gInJpZ2h0IiksCiAgICAgICAgdmFyaWFuY2lhID0gY2VsbF9zcGVjKHZhcmlhbmNpYSwgYm9sZCA9IHZhcmlhbmNpYSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0gaWZlbHNlKHZhcmlhbmNpYSwgIndoaXRlIiwgImJsYWNrIiksIAogICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBpZmVsc2UodmFyaWFuY2lhLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKQogICAgKQoKdmFyaWFuY2lhICU+JQogIGthYmxlKGVzY2FwZSA9IEYpICU+JQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUpICU+JQogIGNvbGxhcHNlX3Jvd3MoY29sdW1ucyA9IDE6MiwgdmFsaWduID0gInRvcCIpIApgYGAKCiMjIyBBbmFsaXNlcyBkZXNjcml0aXZhcwoKYGBge3J9CmhlYWQocG9zX2dhYmFyaXRvJGVzcGVjaWVzLCAxMCkKYGBgCgojIyMjIEluZGljZSBkZSBpZGVudGlmaWNhw6fDo28gcG9yIE9yaWdlbQoKYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTR9CnBvc19nYWJhcml0byRlc3BlY2llICU+JSAKICAgIGdncGxvdChhZXMoZXNwZWNpZURlc2MsIGZyLCBmaWxsID0gZ3J1cG8pKSArIAogICAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKHJvdW5kKGZyICogMTAwLCAxKSwgIiUiKSksIAogICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSwgdmp1c3QgPSAwLjUsCiAgICAgICAgICAgICAgaGp1c3QgPSAtMC41KSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEuMiksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogICAgZmFjZXRfd3JhcCh+b3JpZ2VtLCBzY2FsZXMgPSAiZnJlZV95IikgKwogICAgY29vcmRfZmxpcCgpICsKICAgIHRoZW1lX2J3KCkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBsYWJzKHRpdGxlID0gIkluZGljZSBkZSBJZGVudGlmaWNhw6fDo28gcG9yIE9yaWdlbSIsCiAgICAgICAgIGZpbGwgPSAiR3J1cG9zIiwgeCA9ICIiLCB5ID0gIlxuRnJlcXVlbmNpYSByZWxhdGl2YSIpCgpgYGAKCiMjIyMgSW5kaWNlIGRlIGlkZW50aWZpY2HDp8OjbyBwb3IgRXNww6ljaWUKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQpwb3NfZ2FiYXJpdG8kZXNwZWNpZSAlPiUgCiAgICBnZ3Bsb3QoYWVzKGVzcGVjaWVEZXNjLCBmciwgZmlsbCA9IG9yaWdlbSkpICsgCiAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsKICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAocm91bmQoZnIgKiAxMDAsIDEpLCAiJSIpKSwgCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpLCB2anVzdCA9IDAuNSwKICAgICAgICAgICAgICBoanVzdCA9IC0wLjMpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMS4yKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgICBmYWNldF93cmFwKH5ncnVwbywgc2NhbGVzID0gImZyZWVfeSIpICsKICAgIGNvb3JkX2ZsaXAoKSArCiAgICB0aGVtZV9idygpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogICAgbGFicyh0aXRsZSA9ICJJbmRpY2UgZGUgSWRlbnRpZmljYcOnw6NvIHBvciBFc3DDqWNpZSIsCiAgICAgICAgIGZpbGwgPSAiT3JpZ2VtIiwgeCA9ICIiLCB5ID0gIlxuRnJlcXVlbmNpYSByZWxhdGl2YSIpCmBgYAoKCiMjIyBUZXN0ZXMgZGUgaGlwb3Rlc2VzCgpFc3BlcmFkbyBwLXZhbG9yID49IDAuMDUgbmEgbm9ybWFsaWRhZGUgKGVzcGVyYS1zZSBIMCkKRXNwZXJhZG8gcC12YWxvciA8PSAwLjA1IG5vIHRlc3RlIGRlIGhpcG90ZXNlIChlc3BlcmEtc2UgSDEpCgoxLiBPcyBhbHVub3MgaXRlbmRpZmljYW0gbWFpcyBvcyBub21lcyBkb3MgYW5pbWFpcyBkZSBlc3DDqWNpZXMgZXjDs3RpY2FzIHF1ZSBvcyBhbmltYWlzIGRlIGVzcMOpY2llcyBuYXRpdmFzLgoKKipURVNUIFQtc3R1ZGVudCoqICAKSDAgPSBUaWRlbnQoZXhvdGljYXMpID0gVGlkZW50KG5hdGl2YXMpICAKSDEgPSBUaWRlbnQoZXhvdGljYXMpID4gVGlkZW50KG5hdGl2YXMpCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9M30KdG1wIDwtIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSAlPiUKICBzZWxlY3QodHVybWFzLCBwX25vbWVfZXhvdGljYXMgPSBwX2V4b3RpY2FzLCBwX25vbWVfbmF0aXZhcyA9IHBfbmF0aXZhcywgcF9vcmlnZW1fZXhvdGljYXM6cF9pbmRpY2VfbmF0aXZhcykgJT4lCiAgbWVsdChpZCA9ICJ0dXJtYXMiKQoKY2JpbmQodG1wLCBjb2xzcGxpdCh0bXAkdmFyaWFibGUsICJfIiwgYygicCIsICJpbmRpY2Fkb3IiLCAib3JpZ2VtIikpKSAlPiUKICBzZWxlY3QodHVybWFzLCBpbmRpY2Fkb3IsIG9yaWdlbSwgdmFsdWUpICU+JQogIGdncGxvdCgpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyh4ID0gb3JpZ2VtLCB5ID0gdmFsdWUsIGZpbGwgPSBvcmlnZW0pLCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkb3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIiwKICAgICAgIHkgPSAiUGVyY2VudHVhbCBkZSBpZGVudGlmaWNhw6fDo28iLCB4ID0gIiIpCmBgYAoKYGBge3J9CnQxIDwtIHQudGVzdChwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfbmF0aXZhcywgCiAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfZXhvdGljYXMsIAogICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKdDIgPC0gdC50ZXN0KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX25hdGl2YXMsIAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfZXhvdGljYXMsIAogICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKdDMgPC0gdC50ZXN0KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9uYXRpdmFzLCAKICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9leG90aWNhcywgCiAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQoKZGF0YS5mcmFtZSgKICAgIEFsZ29yaXRtbyA9IGModDEkbWV0aG9kLCB0MiRtZXRob2QsIHQzJG1ldGhvZCksCiAgICAiQ29tcGFyYcOnw6NvIiA9IGMoIk5hdGl2YXMgeCBFeMOzdGljYXMiKSwKICAgICJWYXJpw6F2ZWwiID0gYygKICAgICAgICAiSW5kaWNlIGRlIHJlY29uaGVjaW1lbnRvIiwKICAgICAgICAiSWRlbnRpZmljYcOnw6NvIGRvIG5vbWUgZGFzIGVzcMOpY2llcyIsCiAgICAgICAgIklkZW50aWZpY2HDp8OjbyBkYSBvcmlnZW0iCiAgICApLAogICAgcF92YWxvciA9IGModDEkcC52YWx1ZSwgdDIkcC52YWx1ZSwgdDMkcC52YWx1ZSksCiAgICBIMCA9IGModDEkcC52YWx1ZSA+PSAwLjA1LCB0MiRwLnZhbHVlID49IDAuMDUsIHQzJHAudmFsdWUgPj0gMC4wNSksCiAgICBIMSA9IGModDEkcC52YWx1ZSA8IDAuMDUsIHQyJHAudmFsdWUgPCAwLjA1LCB0MyRwLnZhbHVlIDwgMC4wNSksCiAgICAiQ29uZmlhbsOnYSIgPSBjKAogICAgICAgIHBhc3RlKHBhc3RlMChyb3VuZCh0MSRjb25mLmludCAqIDEwMCwgMiksICIlIiksIGNvbGxhcHNlID0gIiB+ICIpLAogICAgICAgIHBhc3RlKHBhc3RlMChyb3VuZCh0MiRjb25mLmludCAqIDEwMCwgMiksICIlIiksIGNvbGxhcHNlID0gIiB+ICIpLAogICAgICAgIHBhc3RlKHBhc3RlMChyb3VuZCh0MyRjb25mLmludCAqIDEwMCwgMiksICIlIiksIGNvbGxhcHNlID0gIiB+ICIpCiAgICApCikgJT4lCiAgbXV0YXRlKAogICAgcF92YWxvciA9IGNlbGxfc3BlYyhyb3VuZChwX3ZhbG9yLCA0KSwgYm9sZCA9IFQsIGNvbG9yID0gImJsYWNrIiwgYWxpZ24gPSAicmlnaHQiKSwKICAgIEgwID0gY2VsbF9zcGVjKEgwLCBib2xkID0gSDAsCiAgICAgICAgICAgICAgICAgICBjb2xvcj0gaWZlbHNlKEgwLCAid2hpdGUiLCAiYmxhY2siKSwgCiAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gaWZlbHNlKEgwLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKSwKICAgIEgxID0gY2VsbF9zcGVjKEgxLCBib2xkID0gSDEsIAogICAgICAgICAgICAgICAgICAgY29sb3IgPSBpZmVsc2UoSDEsICJ3aGl0ZSIsICJibGFjayIpLCAKICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBpZmVsc2UoSDEsICJncmVlbiIsICIjQ0NDQ0NDIikpCiAgKSAlPiUKICBrYWJsZShlc2NhcGUgPSBGKSAlPiUKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSwgZnVsbF93aWR0aCA9IFRSVUUpICU+JQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKSAlPiUKIyAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFQsIGNvbG9yID0gImRhcmtibHVlIikgJT4lCiAgY29sbGFwc2Vfcm93cyhjb2x1bW5zID0gMToyLCB2YWxpZ24gPSAidG9wIikgJT4lCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJJbnRlcnZhbG8gZGUgY29uZmlhbsOnYSA5NSUiLAogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG5PYnMuOiAiLAogICAgICAgICAgIGZvb3Rub3RlX2FzX2NodW5rID0gVCkKYGBgCgoKYGBge3J9CiMjIEhpcG90ZXNlIDEKIyB0LnRlc3Qoam9nby5kYWRvcy5lbS5wJHBfbmF0aXZhcywgam9nby5kYWRvcy5lbS5wJHBfZXhvdGljYXMsIAojICAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQpgYGAKCjIuIE9zIGFsdW5vcyBpZGVudGlmaWNhbSBtYWlzIGVzcMOpY2llcyBkZSBvcmlnZW0gZXjDs3RpY2EgcXVlIGFzIGRlIG9yaWdlbSBuYXRpdmEuCgoqKlRFU1QgVC1zdHVkZW50KiogIApIMCA9IFRpZGVudChvcmlnZW0uZXhvdGljYXMpID0gVGlkZW50KG9yaWdlbS5uYXRpdmFzKSAgCkgxID0gVGlkZW50KG9yaWdlbS5leG90aWNhcykgPiBUaWRlbnQob3JpZ2VtLm5hdGl2YXMpCgpgYGB7cn0KdC50ZXN0KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9uYXRpdmFzLCAKICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9leG90aWNhcywgCiAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQpgYGAKCjMuIE9zIGFsdW5vcyBpZGVudGlmaWNhbSBtYWlzIGFzIGVzcMOpY2llcyBleMOzdGljYXMgKG5vbWUgZG9zIGFuaW1haXMgZSBvcmlnZW0pIHF1ZSBlc3DDqWNpZXMgbmF0aXZhcy4KCioqQU5PVkEqKiAgCgpgYGB7cn0KIyB0LnRlc3Qoam9nby5kYWRvcy5lbS5wJHBfbmF0aXZhcywgam9nby5kYWRvcy5lbS5wJHBfb3JpZ2VtX25hdGl2YXMsIAojICAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQojIHQuYW5vdmEgPC0gYW92KGcyJHByb3BvcmNhbyB+IGcyJGVzcGVjaWUgKyBnMiR0aXBvKQojIHN1bW1hcnkodC5hbm92YSkKYGBgCgo0LiBPcyBhbHVub3MgcmVjb25oZWNlbSBtYWlzIG1hbcOtZmVyb3MgZG8gcXVlIG9zIGRlbWFpcyBncnVwb3MgdGF4b27Ds21pY29zLgoKKipBTk9WQSoqICAKCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9NX0KZGFkb3NBTk9WQSA8LSAKICAgIHBvc19nYWJhcml0byR0YXhvbm9taWNvcyAlPiUKICAgIHNlbGVjdCh0dXJtYXMsIGdydXBvcyA9IGdydXBvLCB2YWxvcikKI2Fub3ZhIDwtIGFvdihkYXRhID0gcG9zX2dhYmFyaXRvJHRheG9ub21pY29zLCB2YWxvciB+IGdydXBvICsgb3JpZ2VtKQphbm92YSA8LSBhb3YoZGF0YSA9IGRhZG9zQU5PVkEsIHZhbG9yIH4gZ3J1cG9zKQpzdW1tYXJ5KGFub3ZhKQp0dWtleSA8LSBUdWtleUhTRChhbm92YSkKdHVrZXkKI3Bsb3QodHVrZXksIGxhcyA9IDEsIGNvbCA9ICJicm93biIpCgp0a3kgPSBhcy5kYXRhLmZyYW1lKHR1a2V5JGdydXBvcykKdGt5JHBhaXIgPSByb3duYW1lcyh0a3kpCmdncGxvdCh0a3ksIGFlcyhjb2xvdXIgPSBjdXQoYHAgYWRqYCwgYygwLCAwLjAxLCAwLjA1LCAxKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gYygicDwwLjAxIiwicDwwLjA1IiwiTsOjbyBzaWduaWZpY2F0aXZvIikpKSkgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTAsIGx0eT0iMTEiLCBjb2xvdXI9ImdyZXkzMCIpICsKICAgIGdlb21fZXJyb3JiYXIoYWVzKHBhaXIsIHltaW49bHdyLCB5bWF4PXVwciksIHdpZHRoPTAuMikgKwogICAgZ2VvbV9wb2ludChhZXMocGFpciwgZGlmZikpICsKICAgIGNvb3JkX2ZsaXAoKSArCiAgICB0aGVtZV9idygpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogICAgbGFicyh0aXRsZSA9ICJUdWtleSIsCiAgICAgICAgIGNvbG91ciA9ICIiLCB4ID0gIkNvbXBhcmHDp8OjbyIsIHkgPSAiRGlmZXJlbsOnYSIpCiAgICAKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9OH0KZGFkb3NBTk9WQSA8LSAKICAgIHBvc19nYWJhcml0byR0YXhvbm9taWNvcyAlPiUKICAgIG11dGF0ZShncnVwb3MgPSBwYXN0ZShncnVwbywgIkAiLCBvcmlnZW0pKSAlPiUKICAgIHNlbGVjdCh0dXJtYXMsIGdydXBvcywgdmFsb3IpCiNhbm92YSA8LSBhb3YoZGF0YSA9IHBvc19nYWJhcml0byR0YXhvbm9taWNvcywgdmFsb3IgfiBncnVwbyArIG9yaWdlbSkKYW5vdmEgPC0gYW92KGRhdGEgPSBkYWRvc0FOT1ZBLCB2YWxvciB+IGdydXBvcykKc3VtbWFyeShhbm92YSkKdHVrZXkgPC0gVHVrZXlIU0QoYW5vdmEpCnR1a2V5CiNwbG90KHR1a2V5LCBsYXMgPSAxLCBjb2wgPSAiYnJvd24iKQoKdGt5ID0gYXMuZGF0YS5mcmFtZSh0dWtleSRncnVwb3MpCnRreSRwYWlyID0gcm93bmFtZXModGt5KQpnZ3Bsb3QodGt5LCBhZXMoY29sb3VyID0gY3V0KGBwIGFkamAsIGMoMCwgMC4wMSwgMC4wNSwgMSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGMoInA8MC4wMSIsInA8MC4wNSIsIk5vbi1TaWciKSkpKSArCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MCwgbHR5PSIxMSIsIGNvbG91cj0iZ3JleTMwIikgKwogICAgZ2VvbV9lcnJvcmJhcihhZXMocGFpciwgeW1pbj1sd3IsIHltYXg9dXByKSwgd2lkdGg9MC4yKSArCiAgICBnZW9tX3BvaW50KGFlcyhwYWlyLCBkaWZmKSkgKwogICAgY29vcmRfZmxpcCgpICsKICAgIHRoZW1lX2J3KCkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBsYWJzKHRpdGxlID0gIlR1a2V5IiwKICAgICAgICAgY29sb3VyID0gIiIsIHggPSAiQ29tcGFyYcOnw6NvIiwgeSA9ICJEaWZlcmVuw6dhIikKICAgIApgYGAKCjUuIAoKYGBge3J9CiMjIEhpcG90ZXNlIDQKIyB0LnRlc3Qoam9nby5kYWRvcy5lbS5wJHBfZXhvdGljYXMsIGpvZ28uZGFkb3MuZW0ucCRwX29yaWdlbV9leG90aWNhcywgCiMgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIHBhaXJlZCA9IEYsIHZhci5lcXVhbCA9IFQpCmBgYAoKNi4gRXN0dWRhbnRlcyBxdWUgcmVzaWRlbSBuYSBDaWRhZGUgMSAoY29tIFVDKSBpZGVudGlmaWNhbSBtYWlzIGVzcMOpY2llcyBuYXRpdmFzIGRvIHF1ZSBlc3R1ZGFudGVzIHF1ZSByZXNpZGVtIG5hIENpZGFkZSAyIChzZW0gVUMpLgoKYGBge3J9CnByb3BvcmNvZXNQb3JNdW5pY2lwaW8gPC0KICAgIG1lcmdlKAogICAgICAgIHBvc19nYWJhcml0byRkYWRvcyAlPiUgc2VsZWN0KHR1cm1hcywgbXVuaWNpcGlvKSAlPiUgdW5pcXVlKCksCiAgICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hX3NleG8KICAgICkgJT4lCiAgICBzZWxlY3QobXVuaWNpcGlvLCBwX25hdGl2YXMpICU+JQogICAgdGJsX2RmKCkKCiMgdG1wIDwtIGRjYXN0KHByb3BvcmNvZXNQb3JNdW5pY2lwaW8sIGZvcm11bGEgPSBtdW5pY2lwaW8pCiMgbmFtZXModG1wKSA8LSBjKCJ2YWxvciIsICJiZWxhX3Zpc3RhIiwgInNpbHZhbmlhIikKIyBib3hwbG90KHRtcCR2YWxvciwgdG1wJGJlbGFfdmlzdGEpCgpuYXRfc2lsdmFuaWEgPC0KICAgIChwcm9wb3Jjb2VzUG9yTXVuaWNpcGlvICU+JQogICAgICAgIGZpbHRlcihtdW5pY2lwaW8gPT0gIlNpbHbDom5pYSIpKSRwX25hdGl2YXMKbmF0X2JlbGF2aXN0YSA8LQogICAgKHByb3BvcmNvZXNQb3JNdW5pY2lwaW8gJT4lCiAgICAgICAgZmlsdGVyKG11bmljaXBpbyA9PSAiQmVsYSBWaXN0YSBkZSBHb2nDoXMiKSkkcF9uYXRpdmFzCiAgICAKI2NiaW5kKG5hdF9zaWx2YW5pYSwgbmF0X2JlbGF2aXN0YSkKYm94cGxvdChuYXRfc2lsdmFuaWEsIG5hdF9iZWxhdmlzdGEpCiNzdW1tYXJ5KG5hdF9zaWx2YW5pYSkKI3N1bW1hcnkobmF0X2JlbGF2aXN0YSkKI3Zhci50ZXN0KG5hdF9zaWx2YW5pYSwgbmF0X2JlbGF2aXN0YSwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikKCnQudGVzdChuYXRfc2lsdmFuaWEsIG5hdF9iZWxhdmlzdGEsCiAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQpgYGAKCjwhLS0gNy4gRXN0dWRhbnRlcyBxdWUgcmVzaWRlbSBlbSDDoXJlYSBydXJhbCB0ZW0gbWFpb3IgY29uaGVjaW1lbnRvIHNvYnJlIGFzIGVzcMOpY2llcyBuYXRpdmFzLiAtLT4KCjwhLS0gKipBTk9WQSoqIC0tPgoKPCEtLSAjIyMjIERhZG9zIC0tPgoKPCEtLSBEYWRvcyBzw6NvIGFncnVwYWRvcyBwb3IgTXVuaWNpcGlvLCB0dXJtYXMgZSDDoXJlYSBkZSByZXNpZMOqbmNpYTogLS0+Cgo8IS0tIGBgYHtyfSAtLT4KPCEtLSBqb2dvLmRhZG9zLmVtLnAxIDwtIGpvZ28uZGFkb3MuZW0ubGltcG8gJT4lICAtLT4KPCEtLSAgICAgZ3JvdXBfYnkobXVuaWNpcGlvLCB0dXJtYXMsIGFyZWEpICU+JSAtLT4KPCEtLSAgICAgc3VtbWFyaXNlKHF0ZGUgPSBuKCksIC0tPgo8IS0tICAgICAgICAgICAgICAgdG90YWxfYWNlcnRvc19lc3BlcmFkbyA9IHF0ZGUgKiA1LCAtLT4KPCEtLSAgICAgICAgICAgICAgIHBfZXhvdGljYXMgPSBzdW0oZXhvdGljYXMpIC8gdG90YWxfYWNlcnRvc19lc3BlcmFkbywgLS0+CjwhLS0gICAgICAgICAgICAgICBwX25hdGl2YXMgPSBzdW0obmF0aXZhcykgLyB0b3RhbF9hY2VydG9zX2VzcGVyYWRvLCAtLT4KPCEtLSAgICAgICAgICAgICAgIHBfb3JpZ2VtX2V4b3RpY2FzID0gc3VtKG9yaWdlbV9leG90aWNhcykgLyB0b3RhbF9hY2VydG9zX2VzcGVyYWRvLCAtLT4KPCEtLSAgICAgICAgICAgICAgIHBfb3JpZ2VtX25hdGl2YXMgPSBzdW0ob3JpZ2VtX25hdGl2YXMpIC8gdG90YWxfYWNlcnRvc19lc3BlcmFkbykgJT4lIC0tPgo8IS0tICAgICB1bmdyb3VwKCkgLS0+Cgo8IS0tICMgam9nby5kYWRvcy5lbS5wMSA8LSBqb2dvLmRhZG9zLmVtLnAxICU+JSAgLS0+CjwhLS0gIyAgICAgc2VsZWN0KGFyZWEsIHBfbmF0aXZhcywgcF9leG90aWNhcykgLS0+Cgo8IS0tIHByaW50KGpvZ28uZGFkb3MuZW0ucDEpIC0tPgoKPCEtLSBuYXRfcnVhbCA8LSAtLT4KPCEtLSAgICAgam9nby5kYWRvcy5lbS5wMVtqb2dvLmRhZG9zLmVtLnAxJGFyZWEgPT0gIlJ1cmFsIiwgXSRwX25hdGl2YXMgLS0+CjwhLS0gbmF0X3VyYmFuYSA8LSAgLS0+CjwhLS0gICAgIGpvZ28uZGFkb3MuZW0ucDFbam9nby5kYWRvcy5lbS5wMSRhcmVhID09ICJVcmJhbmEiLCBdJHBfbmF0aXZhcyAtLT4KPCEtLSBzdW1tYXJ5KG5hdF9ydWFsKSAtLT4KPCEtLSBzdW1tYXJ5KG5hdF91cmJhbmEpIC0tPgo8IS0tIGJveHBsb3QobmF0X3J1YWwsIG5hdF91cmJhbmEpIC0tPgoKPCEtLSB0LnRlc3QobmF0X3J1YWwsIG5hdF91cmJhbmEsICAtLT4KPCEtLSAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkgLS0+CgoKPCEtLSAjIHNoYXBpcm8udGVzdChqb2dvLmRhZG9zLmVtLnAxJHBfbmF0aXZhcykgLS0+CjwhLS0gIyBzaGFwaXJvLnRlc3Qoam9nby5kYWRvcy5lbS5wMSRwX2V4b3RpY2FzKSAtLT4KCjwhLS0gYXJlYS5hbm92YSA8LSBhb3Yoam9nby5kYWRvcy5lbS5wMSRwX25hdGl2YXMgfiBqb2dvLmRhZG9zLmVtLnAxJG11bmljaXBpbyArIGpvZ28uZGFkb3MuZW0ucDEkYXJlYSkgLS0+CjwhLS0gc3VtbWFyeShhcmVhLmFub3ZhKSAtLT4KCjwhLS0gIyBhcmVhLmFub3ZhIDwtIGFvdihqb2dvLmRhZG9zLmVtLnAxJHBfZXhvdGljYXMgfiBqb2dvLmRhZG9zLmVtLnAxJG11bmljaXBpbyArIGpvZ28uZGFkb3MuZW0ucDEkYXJlYSkgLS0+CjwhLS0gIyBzdW1tYXJ5KGFyZWEuYW5vdmEpIC0tPgoKPCEtLSBgYGAgLS0+CgoKPCEtLSA4LiAtLT4KCjwhLS0gOS4gLS0+Cgo8IS0tIDEwLiBFc3R1ZGFudGVzIGRhIENpZGFkZSAxIChjb20gVUMpIHRlbSBtYWlvciBuw7ptZXJvIGRlIGFjZXJ0b3MgZGUgZXNww6ljaWVzIG5hdGl2YXMuIC0tPgoKPCEtLSBgYGB7cn0gLS0+CjwhLS0gam9nby5kYWRvcy5lbS5wMiA8LSBqb2dvLmRhZG9zLmVtLmxpbXBvICU+JSAgLS0+CjwhLS0gICAgIGZpbHRlcihtdW5pY2lwaW8gPT0gIlNpbHbDom5pYSIpICU+JSAtLT4KPCEtLSAgICAgZ3JvdXBfYnkodHVybWFzLCBmbG9uYSkgJT4lIC0tPgo8IS0tICAgICBzdW1tYXJpc2UocXRkZSA9IG4oKSwgLS0+CjwhLS0gICAgICAgICAgICAgICB0b3RhbF9hY2VydG9zX2VzcGVyYWRvID0gcXRkZSAqIDUsIC0tPgo8IS0tICAgICAgICAgICAgICAgcF9leG90aWNhcyA9IHN1bShleG90aWNhcykgLyB0b3RhbF9hY2VydG9zX2VzcGVyYWRvLCAtLT4KPCEtLSAgICAgICAgICAgICAgIHBfbmF0aXZhcyA9IHN1bShuYXRpdmFzKSAvIHRvdGFsX2FjZXJ0b3NfZXNwZXJhZG8sIC0tPgo8IS0tICAgICAgICAgICAgICAgcF9vcmlnZW1fZXhvdGljYXMgPSBzdW0ob3JpZ2VtX2V4b3RpY2FzKSAvIHRvdGFsX2FjZXJ0b3NfZXNwZXJhZG8sIC0tPgo8IS0tICAgICAgICAgICAgICAgcF9vcmlnZW1fbmF0aXZhcyA9IHN1bShvcmlnZW1fbmF0aXZhcykgLyB0b3RhbF9hY2VydG9zX2VzcGVyYWRvKSAlPiUgLS0+CjwhLS0gICAgIHVuZ3JvdXAoKSAtLT4KCjwhLS0gcHJpbnQoam9nby5kYWRvcy5lbS5wMikgLS0+Cgo8IS0tIG5hdF91YyA8LSAtLT4KPCEtLSAgICAgam9nby5kYWRvcy5lbS5wMltqb2dvLmRhZG9zLmVtLnAyJGZsb25hID09ICJTaW0iLCBdJHBfbmF0aXZhcyAtLT4KPCEtLSBuYXRfbmFvX3VjIDwtICAtLT4KPCEtLSAgICAgam9nby5kYWRvcy5lbS5wMltqb2dvLmRhZG9zLmVtLnAyJGZsb25hID09ICJOw6NvIiwgXSRwX25hdGl2YXMgLS0+CjwhLS0gYm94cGxvdChuYXRfdWMsIG5hdF9uYW9fdWMpIC0tPgoKPCEtLSB0LnRlc3QobmF0X3VjLCBuYXRfbmFvX3VjLCAgLS0+CjwhLS0gICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIHBhaXJlZCA9IEYsIHZhci5lcXVhbCA9IFQpIC0tPgoKPCEtLSBgYGAgLS0+Cg==